À cette étape, dans un premier temps, nous allons utiliser les bases de données préparées dans l'étape précédente (prepare_data) pour créer une carte qui permet de visualiser les sites de camping et les alentours. Cela nous permettra de former nos premières idées sur les sites de camping (et sur les résultats du clustering), car nous pouvons y voir la disposition de tous les éléments les uns par rapport aux autres.
!pip install pandas fiona shapely pyproj rtree
!pip install geopandas
Requirement already satisfied: pandas in /opt/conda/lib/python3.9/site-packages (1.3.4) Requirement already satisfied: fiona in /opt/conda/lib/python3.9/site-packages (1.8.20) Requirement already satisfied: shapely in /opt/conda/lib/python3.9/site-packages (1.8.0) Requirement already satisfied: pyproj in /opt/conda/lib/python3.9/site-packages (3.3.0) Requirement already satisfied: rtree in /opt/conda/lib/python3.9/site-packages (0.9.7) Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.9/site-packages (from pandas) (2.8.2) Requirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.9/site-packages (from pandas) (2021.3) Requirement already satisfied: numpy>=1.17.3 in /opt/conda/lib/python3.9/site-packages (from pandas) (1.20.3) Requirement already satisfied: click-plugins>=1.0 in /opt/conda/lib/python3.9/site-packages (from fiona) (1.1.1) Requirement already satisfied: certifi in /opt/conda/lib/python3.9/site-packages (from fiona) (2021.10.8) Requirement already satisfied: click>=4.0 in /opt/conda/lib/python3.9/site-packages (from fiona) (8.0.3) Requirement already satisfied: six>=1.7 in /opt/conda/lib/python3.9/site-packages (from fiona) (1.16.0) Requirement already satisfied: attrs>=17 in /opt/conda/lib/python3.9/site-packages (from fiona) (21.2.0) Requirement already satisfied: munch in /opt/conda/lib/python3.9/site-packages (from fiona) (2.5.0) Requirement already satisfied: setuptools in /opt/conda/lib/python3.9/site-packages (from fiona) (58.2.0) Requirement already satisfied: cligj>=0.5 in /opt/conda/lib/python3.9/site-packages (from fiona) (0.7.2) Requirement already satisfied: geopandas in /opt/conda/lib/python3.9/site-packages (0.10.2) Requirement already satisfied: fiona>=1.8 in /opt/conda/lib/python3.9/site-packages (from geopandas) (1.8.20) Requirement already satisfied: pyproj>=2.2.0 in /opt/conda/lib/python3.9/site-packages (from geopandas) (3.3.0) Requirement already satisfied: shapely>=1.6 in /opt/conda/lib/python3.9/site-packages (from geopandas) (1.8.0) Requirement already satisfied: pandas>=0.25.0 in /opt/conda/lib/python3.9/site-packages (from geopandas) (1.3.4) Requirement already satisfied: six>=1.7 in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (1.16.0) Requirement already satisfied: click-plugins>=1.0 in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (1.1.1) Requirement already satisfied: munch in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (2.5.0) Requirement already satisfied: click>=4.0 in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (8.0.3) Requirement already satisfied: cligj>=0.5 in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (0.7.2) Requirement already satisfied: certifi in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (2021.10.8) Requirement already satisfied: attrs>=17 in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (21.2.0) Requirement already satisfied: setuptools in /opt/conda/lib/python3.9/site-packages (from fiona>=1.8->geopandas) (58.2.0) Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.9/site-packages (from pandas>=0.25.0->geopandas) (2.8.2) Requirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.9/site-packages (from pandas>=0.25.0->geopandas) (2021.3) Requirement already satisfied: numpy>=1.17.3 in /opt/conda/lib/python3.9/site-packages (from pandas>=0.25.0->geopandas) (1.20.3)
!pip install pandas-bokeh
Requirement already satisfied: pandas-bokeh in /opt/conda/lib/python3.9/site-packages (0.5.5) Requirement already satisfied: bokeh>=2.0 in /opt/conda/lib/python3.9/site-packages (from pandas-bokeh) (2.4.1) Requirement already satisfied: pandas>=0.22.0 in /opt/conda/lib/python3.9/site-packages (from pandas-bokeh) (1.3.4) Requirement already satisfied: packaging>=16.8 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (21.0) Requirement already satisfied: pillow>=7.1.0 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (8.3.2) Requirement already satisfied: typing-extensions>=3.10.0 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (3.10.0.2) Requirement already satisfied: tornado>=5.1 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (6.1) Requirement already satisfied: Jinja2>=2.9 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (3.0.2) Requirement already satisfied: numpy>=1.11.3 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (1.20.3) Requirement already satisfied: PyYAML>=3.10 in /opt/conda/lib/python3.9/site-packages (from bokeh>=2.0->pandas-bokeh) (6.0) Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.9/site-packages (from pandas>=0.22.0->pandas-bokeh) (2.8.2) Requirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.9/site-packages (from pandas>=0.22.0->pandas-bokeh) (2021.3) Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.9/site-packages (from Jinja2>=2.9->bokeh>=2.0->pandas-bokeh) (2.0.1) Requirement already satisfied: pyparsing>=2.0.2 in /opt/conda/lib/python3.9/site-packages (from packaging>=16.8->bokeh>=2.0->pandas-bokeh) (2.4.7) Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.9/site-packages (from python-dateutil>=2.7.3->pandas>=0.22.0->pandas-bokeh) (1.16.0)
import geopandas as gpd
import numpy as np
import pandas as pd
import pandas_bokeh
pandas_bokeh.output_notebook()
#Sortie html des graphiques
#pandas_bokeh.output_file("Visualisation_graphique_carte.html")
#pandas_bokeh.output_file("Visualisation_graphique_cluster.html")
#Chargement des bases de données préparées dans prepare_data
defibrillateurs = pd.read_csv("Datasets/defibrillateur.csv")
police = pd.read_csv("Datasets/police.csv")
hopitaux = pd.read_csv("Datasets/hopitaux.csv")
camping = pd.read_csv("Datasets/camping.csv")
departements = pd.read_csv("Datasets/departements.csv")
communes = pd.read_csv("Datasets/communes.csv")
sans_mobile = pd.read_csv("Datasets/sans_mobile.csv")
camping_cluster = pd.read_csv("Datasets/camping_labelled.csv")
#Conversion en GeoDataFrame
from shapely import wkt
camping_cluster['geometry'] = camping_cluster['geometry'].apply(wkt.loads)
camping_cluster = gpd.GeoDataFrame(camping_cluster, crs = 'epsg:4326')
communes['geometry'] = communes['geometry'].apply(wkt.loads)
communes = gpd.GeoDataFrame(communes, crs = 'epsg:4326')
departements['geometry'] = departements['geometry'].apply(wkt.loads)
departements = gpd.GeoDataFrame(departements, crs = 'epsg:4326')
sans_mobile['geometry'] = sans_mobile['geometry'].apply(wkt.loads)
sans_mobile = gpd.GeoDataFrame(sans_mobile, crs = 'epsg:4326')
defibrillateurs['geometry'] = defibrillateurs['geometry'].apply(wkt.loads)
defibrillateurs = gpd.GeoDataFrame(defibrillateurs, crs = 'epsg:4326')
police['geometry'] = police['geometry'].apply(wkt.loads)
police = gpd.GeoDataFrame(police, crs = 'epsg:4326')
hopitaux['geometry'] = hopitaux['geometry'].apply(wkt.loads)
hopitaux = gpd.GeoDataFrame(hopitaux, crs = 'epsg:4326')
camping['geometry'] = camping['geometry'].apply(wkt.loads)
camping = gpd.GeoDataFrame(camping, crs = 'epsg:4326')
Création de la carte (aussi accessible en HTML : Visualisation_graphique_carte.html à charger) :
m = communes.plot_bokeh(line_width = 0.1, fill_alpha = 0, legend = "Communes", title = "Sites de Camping en Ile-de-France", show_figure = False)
m.width = 1000
m.height = 700
departements.plot_bokeh(figure = m, line_color = "black", fill_alpha = 0.3, color = "blue", legend = "Départements", show_figure = False)
sans_mobile.plot_bokeh(figure = m, legend = "Pas de Couverture Mobile", color = "grey", line_width = 0.5, show_figure = False)
defibrillateurs.plot_bokeh(figure = m, legend = "Défibrillateurs", size = 0.5, color = "green", show_figure = False)
police.plot_bokeh(figure = m, color = "blue", size = 2, legend = "Police/Gendarmerie", hovertool_columns = ["Nom"], show_figure = False)
hopitaux.plot_bokeh(figure = m, color = "yellow", size = 2, legend = "Hôpitaux/Cliniques",hovertool_columns = ["Nom"], show_figure = False)
camping.plot_bokeh(figure = m, size = 5, legend = "Campings (classés)", category = "Classement", colormap = "Reds", hovertool_columns = ["Nom", "Adresse", "Emplacements", "Classement", "Surface"])
/opt/conda/lib/python3.9/site-packages/pandas_bokeh/geoplot.py:118: ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry. for polygon in geometry:
Choisissez les éléments que vous souhaitez voir affichés sur la carte en cliquant sur la légende
Il y a 65 sites de camping en Ile-de-France. Sans surprise, la plupart de ces sites sont éparpillés dans la banlieue parisienne et non dans la ville, contrairement aux hôpitaux/cliniques, postes de police/gendarmeries et défibrillateurs qui sont concentrés dans la ville et la petite couronne parisienne et qui sont de moins en moins nombreux plus on s'éloigne de Paris. Si on souhaitait comparer les sites de camping selon leur accessibilité aux établissements de sécurité et de santé, ceux qui sont dans la ville de Paris et dans la peitite couronne seront au même niveau, ayant le plus d'accès à ces services. On observe par ailleurs que ces sites-là sont aussi mieux classés, et donc ont plus d'aménagements en interne comme l'accès à Internet et une permanence 24h/24. En termes de nombre d'emplacements (200-300) et de surface, ceux-là sont aussi les plus grands en Ile-de-France, sans doute à cause de leur proximité à la ville. Les sites plus loins de la ville sont, eux, plus loins des établissements de santé et de sécurité, n'ont pas tous des aménagements tels qu'une connexion Internet ou une permanence 24h/24, et sont plus petits, ayant environ cent emplacements. On a constaté dans le fichier prepare_data que seulement un site de camping n'avait pas une bonne couverture de réseau mobile, les autres sont (heureusement) bien couverts.
Ici, nous allons utiliser la base de données sortie du fichier clustering, pour représenter les clusters de sites de camping
Création de la carte des sites de camping séparés en clusters (aussi accessible en HTML : Visualisation_graphique_cluster.html à charger) :
c = communes.plot_bokeh(line_width = 0.1, fill_alpha = 0, legend = "Communes", title = "Clusters de Sites de Camping en Ile-de-France", show_figure = False)
c.width = 1000
c.height = 700
departements.plot_bokeh(figure = c, line_color = "black", fill_alpha = 0.3, color = "blue", legend = "Départements", show_figure = False)
camping_cluster.plot_bokeh(figure = c, size = 5, legend = "Campings (clusters)", category = "label", colormap = ["red", "green", "yellow", "blue"], hovertool_columns = ["Nom", "Adresse", "Emplacements", "Classement", "Surface"])
Les sites de camping semblent être équitablement répartis sur la carte, mais nous pourrons remarquer que les sites en rouge (sites de petite taille et de haute qualité) sont plus présents au nord de l'IDF, les sites en jaune (sites de petite taille et moindre qualité) sont plus présents à l'est de l'IDF et presque pas du tout au sud de l'IDF qui est plutôt caractérisé par des sites de haute qualité (grandes et petites tailles).
!jupyter nbconvert --to html Visualisation.ipynb
[NbConvertApp] Converting notebook Visualisation.ipynb to html [NbConvertApp] Writing 13740136 bytes to Visualisation.html